// 过滤器组件部分 状态管理模块
export default {
  state: () => ({
    // 仓库信息
    projectList: [],
    projectId: "",

    // 分支信息
    branchList: [],
    branchId: "master", // 初始化时展示使用，实际值为数字（对应的ID）

    scopeType: "blobs",

    catalogueList: [],
  }),
  // 唯一能改变数据的地方
  mutations: {
    changeProjectList(state, val) {
      state.projectList = val;
    },
    changeProjectId(state, val) {
      state.projectId = val;
    },

    changeBranchList(state, val) {
      state.branchList = val;
    },
    changeBranchId(state, val) {
      state.branchId = val;
    },

    changeScopeType(state, val) {
      state.scopeType = val;
    },
  },
  // 异步操作数据，实际上里面还是通过触发mutations来改变，也可以不用，但是如果需要做一些处理判断逻辑，可以用下这个. 通过dispatch触发
  actions: {},
  // 访问数据，也可以不使用，而使用它的原因就是简洁，方便
  getters: {
    // 获取选择的仓库ID
    storeGetterProjectId(state) {
      return state.projectId;
    },
    // 获取选择的仓库Name
    storeGetterProjectName(state) {
      // 通过id进行匹配筛选
      return state.projectList?.filter(
        (item) => item?.value === state.projectId
      )[0]?.label;
    },
    // 用户模糊搜素的仓库List
    storeGetterProjectList(state) {
      return state.projectList;
    },

    // 获取选择的仓库分支列表
    storeGetterBranchList(state) {
      return state.branchList;
    },
    // 获取选择的仓库分支名
    storeGetterBranchName(state) {
      // 通过id进行匹配筛选
      return state.branchList?.filter(
        (item) => item?.value === state.branchId
      )[0]?.label;
    },
    // 获取选择的仓库分支名对应的Id
    storeGetterBranchId(state) {
      return state.branchId;
    },

    // 获取选择的筛选类型
    storeGetterScopeType(state) {
      return state.scopeType;
    },

    // 当前选中仓库和分支对应的gitlab地址
    storeGetterGitLabUrl(state, getters) {
      return state.branchList?.filter((item) => {
        return item?.name === getters.storeGetterBranchName;
      })[0]?.web_url;
    },

    // 当前选中的仓库信息
    storeGetterSelectProjectObj(state) {
      return state.projectList?.filter(
        (item) => item?.value === state.projectId
      )[0];
    },

    // 当前选中分支信息
    storeGetterSelectBranchObj(state, getters) {
      return state.branchList?.filter((item) => {
        return item?.name === getters.storeGetterBranchName;
      })[0];
    },
  },
};
